#include "DmaInitHelper.h"
#include "GpioInitHelper.h"
#include "UsartInitHelper.h"
#include "DeviceDef.h"
#include "LedBoardModule.h"


// 全局变量，用于保持一些参数，并方便修改

//Dma Config
void App_DmaCfg(void) {


  stc_dma_init_t stcDmaInit;

//#ifdef DEBUG_TX_ENABLE
  // 控制台 DMA参数设置
  {// 初始化DMA 控制台发送通道
    /* 调试串口 DMA初始化 Config */
    // 调试串口发送中断绑定到AOS上
    AOS_SetTriggerEventSrc(AOS_DMA1_0, EVT_SRC_USART3_TI);
    /* USART_TX_DMA */
    (void) DMA_StructInit(&stcDmaInit);
    stcDmaInit.u32IntEn = DMA_INT_ENABLE;
    stcDmaInit.u32BlockSize = 1UL;
    stcDmaInit.u32TransCount = 0UL;
    stcDmaInit.u32DataWidth = DMA_DATAWIDTH_8BIT;
    stcDmaInit.u32DestAddr = (uint32_t) (&CM_USART3->TDR);
    stcDmaInit.u32SrcAddr = (uint32_t) 0;
    stcDmaInit.u32SrcAddrInc = DMA_SRC_ADDR_INC;
    stcDmaInit.u32DestAddrInc = DMA_DEST_ADDR_FIX;
    int32_t i32Ret = DMA_Init(CM_DMA1, DMA_CH0, &stcDmaInit);

    if (LL_OK == i32Ret) {
	  //DMA_ClearTransCompleteStatus(CM_DMA1, DMA_INT_TC_CH0);
      DMA_Cmd(CM_DMA1, ENABLE);
	  //(void)DMA_ChCmd(CM_DMA1, DMA_CH0, ENABLE);
	  

    } else {
      led_status.led_error = 1;
	  GPIO_SetPins(LED_RUN_PORT, LED_RUN_PIN);
      for (;;) {
      }
    }
  }// 初始化DMA 控制台发送通道
  // 控制台 DMA参数设置
//#endif // DEBUG_TX_ENABLE
 
	//#ifdef DEBUG_TX_ENABLE
  // FLASH SPI DMA参数设置
  {// 初始化FLASH SPI DMA SPI发送通道
    /* FLASH SPI DMA初始化 Config */
    // FLASH SPI发送中断绑定到AOS上
    AOS_SetTriggerEventSrc(AOS_DMA2_2, EVT_SRC_SPI3_SPTI);
    /* SPI_TX_DMA */
    (void)DMA_StructInit(&stcDmaInit);
    stcDmaInit.u32BlockSize  = 1UL;
    stcDmaInit.u32TransCount = SPI3_TX_BUF_LEN;
    stcDmaInit.u32DataWidth  = DMA_DATAWIDTH_8BIT;
    /* Configure TX */
    stcDmaInit.u32SrcAddrInc  = DMA_SRC_ADDR_INC;
    stcDmaInit.u32DestAddrInc = DMA_DEST_ADDR_FIX;
    stcDmaInit.u32SrcAddr     = (uint32_t)(spi3_tx_buf);
    stcDmaInit.u32DestAddr    = (uint32_t)(&CM_SPI3->DR);

    if (LL_OK == DMA_Init(CM_DMA2, DMA_CH2, &stcDmaInit)) {
      DMA_Cmd(CM_DMA2, ENABLE);
			DMA_ChCmd(CM_DMA2, DMA_CH2, ENABLE);
    } else {
      led_status.led_error = 1;
	  GPIO_SetPins(LED_RUN_PORT, LED_RUN_PIN);
      for (;;) {
				rt_thread_yield();
      }
    }
  }// 初始化FLASH SPI DMA SPI发送通道
	{// 初始化FLASH SPI DMA SPI接收通道
    // FLASH SPI接收中断绑定到AOS上
    AOS_SetTriggerEventSrc(AOS_DMA2_3, EVT_SRC_SPI3_SPRI);
    /* SPI_RX_DMA */
    stcDmaInit.u32IntEn       = DMA_INT_ENABLE;
    stcDmaInit.u32SrcAddrInc  = DMA_SRC_ADDR_FIX;
    stcDmaInit.u32DestAddrInc = DMA_DEST_ADDR_INC;
    stcDmaInit.u32SrcAddr     = (uint32_t)(&CM_SPI3->DR);
    stcDmaInit.u32DestAddr    = (uint32_t)(spi3_rx_buf);

    if (LL_OK == DMA_Init(CM_DMA2, DMA_CH3, &stcDmaInit)) {
      DMA_Cmd(CM_DMA2, ENABLE);
			DMA_ChCmd(CM_DMA2, DMA_CH3, ENABLE);
    } else {
      led_status.led_error = 1;
	  GPIO_SetPins(LED_RUN_PORT, LED_RUN_PIN);
      for (;;) {
				rt_thread_yield();
      }
    }
  }// 初始化FLASH SPI DMA SPI接收通道
  // FLASH SPI DMA参数设置
//#endif // DEBUG_TX_ENABLE
}
